package com.yys.excel.yysexcel.controller;


import cn.hutool.db.Entity;
import cn.hutool.db.Page;
import cn.hutool.db.PageResult;
import com.yys.excel.yysexcel.common.constant.ExcelStants;
import com.yys.excel.yysexcel.common.enums.ErrorStatus;
import com.yys.excel.yysexcel.common.result.R;
import com.yys.excel.yysexcel.entity.ImportExportTask;
import com.yys.excel.yysexcel.entity.entityBo.ImportExportParamBo;
import com.yys.excel.yysexcel.mapper.ImportExportMapper;
import com.yys.excel.yysexcel.service.ImportExportService;
import com.yys.excel.yysexcel.utils.OssUtils;
import com.yys.excel.yysexcel.utils.dbUtil.DbUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;

/**
 * 导出
 *
 * @author lys
 * @date 2022/11/24
 */
@RestController
@RequestMapping("/export")
@RequiredArgsConstructor
@CrossOrigin
public class ExportController {
    private final ImportExportService importExportService;

    /**
     * 实时导出并下载文件
     *
     * @param importExportParamBo 进出口参数波
     * @param response            响应
     */
    @PostMapping("/exportByTempleIdDownload")
    public R exportByTempleIdDownload(@RequestBody ImportExportParamBo importExportParamBo, HttpServletResponse response) {
        try {
            return importExportService.exportByTempleIdDownload(importExportParamBo,response);
        }catch (Exception e){
            return R.fail(e.getMessage());
        }
    }

    /**
     * 根据任务id 下载已完成好的文件
     *
     * @param id       id
     * @param fileName 设置下载后的文件名称
     * @param response 响应
     * @return {@link R}
     */
    @GetMapping("/downlodaFileById")
    public R downlodaFileById(String id,String fileName, HttpServletResponse response) {
        return importExportService.downlodaFileById(id,fileName,response);
    }

    /**
     * 导出文件，并将操作记录入库
     *
     * @param importExportParamBo 进出口参数波
     */
    @PostMapping ("/exportByTempleId")
    public R exportByTempId(@RequestBody ImportExportParamBo importExportParamBo) {
        return R.ok(importExportService.exportByTempId(importExportParamBo));
    }

    /**
     * 重新开始任务 根据任务id
     *
     * @param id id
     * @return {@link R}
     */
    @GetMapping("/restartTaskById")
    public R restartTaskById(String id) {
        try {
            importExportService.restartTaskById(id);
            return R.ok();
        }catch (Exception e){
            return R.fail(e.getMessage());
        }
    }

    /**
     * 停止任务 根据任务id
     *
     * @param id id
     * @return {@link R}
     */
    @GetMapping("/stopTaskById")
    public R stopTaskById(String id) {
        int update = ImportExportMapper.updateTaskStatus(id, ErrorStatus.ACTIVEOVER.getCode(),null);
        return R.ok(update);
    }

    /**
     * 通过id获取结果
     *
     * @param id        id
     * @return {@link R}
     */
    @GetMapping("/getResultById")
    public R getResultById(String id) {
        ImportExportTask task = ImportExportMapper.getImportExportTaskById(id);
        OssUtils.getOssPath(task);
        return R.ok(task);
    }

    /**
     * 得到结果页面
     *
     * @param where 查询条件
     * @return {@link R}
     */
    @GetMapping("/getResultPage")
    public R getResultPage(@RequestBody Entity where) {
        where.setTableName(ExcelStants.IMPORT_EXPORT_TASK_TABLE).set("isdelete","0");
        Page page = DbUtil.getPage(where);
        PageResult<Entity> res = DbUtil.page(where, page);
        for (Entity e : res) {
            OssUtils.getOssPath(e);
        }
        return R.ok(res);
    }
}
